/*
 * @Author: 四川华西绿舍建材有限公司
 * @Date: 2023-11-15 16:58:33
 * @LastEditors: 陈波
 * @LastEditTime: 2024-03-16 22:58:42
 * @Description: 
 * @FilePath: \graDesign\src\utils\util.ts
 */
/**
 * 根据code转换name
 * @param {Array} arr 对应关系的数组
 * @param code 需要查找的code
 */
// store
import useLoginStore from "@/store/login";
import { storeToRefs } from 'pinia';

import storageFn from "@/utils/storage";
const USER_KEY = 'userInfo';

export function formateNameByCode(arr: Array<any>, code: string | number): (string | number) {
  let str = '';
  for(const i of arr) {
    if(i.code == code) {
      str = i.name;
      break;
    }
  }
  return str;
}

/**
 * 判断有无元素权限
 * @param flag 进行判断的用户权限flag
 */
export function hasPermission(flag: boolean): boolean {
  // false ==> 无权限
  // true ==> 有权限
  // const userInfo = storageFn.getStorage('local', USER_KEY)
  const loginStore = useLoginStore();
  const { userInfo } = storeToRefs(loginStore);
  if(userInfo.value.ismanager == 1 || userInfo.value.ismanager == 2) {
    // 如果是管理员
    return true;
  } else {
    return !flag;
  }
}

/**
 * 校验密码 除数字外，还需包括字母以及特殊字符
 * @param pwd 需要进行校验的密码字符串
 */
export function checkPassword(pwd: string): boolean {
  // 至少5位且包含字母、特殊字符和数字
  const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{5,}$/;

  return passwordRegex.test(pwd);
}

/**
 * 校验手机号
 * @param phone 需要进行校验的手机号字符串
 */
export function checkPhone(phone: string): boolean {
  // 手机号码
  const phoneRegex = /^1[3456789]\d{9}$/;

  return phoneRegex.test(phone);
}

/**
 * @description 获取需要的时间格式
 * @param {Date} time 时间、时间字符串、时间戳
 * @param {String} format 时间格式，默认'YYYY-MM-DD'。如果是'星期WW'，则返回（如：'星期日'）
 * @return {String} 格式化后的时间
 * 使用范例：
 * <p class="date_item date_p">当前时间：{{ date }}</p>
  <p class="date_item week_p">{{ weekDay }}</p>
  date.value = formatDate(new Date(), "YYYY年MM月DD日 hh:mm:ss");
  weekDay.value = formatDate(new Date(), "星期WW");
*/
export const formatDate = (time: Date, format: string): string => {
  time = time ? new Date(time) : new Date();
  format = format || "YYYY-MM-DD";

  function tf(i: any) {
    return (i < 10 ? "0" : "") + i;
  }

  return format.replace(
    /YYYY|yyyy|MM|DD|dd|HH|hh|mm|ss|WW/g,
    function (a: any) {
      switch (a) {
        case "YYYY":
        case "yyyy":
          return tf(time.getFullYear());
        case "MM":
          return tf(time.getMonth() + 1);
        case "DD":
        case "dd":
          return tf(time.getDate());
        case "mm":
          return tf(time.getMinutes());
        case "hh":
        case "HH":
          return tf(time.getHours());
        case "ss":
          return tf(time.getSeconds());
        case "WW":
          return ["日", "一", "二", "三", "四", "五", "六"][time.getDay()];
      }
    }
  );
};

// 找出需要权限的路径
export function getAuthorizedHrefs(menuList = []) {
  const authorizedPaths = [];

  menuList.forEach((menu) => {
      // 如果当前菜单项有权限
      if (menu.hasAuth && menu.href) {
      authorizedPaths.push(menu.href);
      }

      // 检查是否存在子菜单或子节点
      const childMenus = menu.childrenSubMenus || menu.childrenNodes;

      if (Array.isArray(childMenus)) {
      // 对子菜单进行递归处理
      const childPaths = getAuthorizedHrefs(childMenus);
      authorizedPaths.push(...childPaths);
      }
  });

  return authorizedPaths;
}